#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <unistd.h>
#include <netinet/in.h>

#include "server_socket.c"

#define SERVERPORT 3333 //定义端口号
#define BACKLOG 10 //请求队列中允许的最大请求数

int main() {
    struct sockaddr_in cs;
    int c_size;
    int listen_socket_fd, client_fd; 
	
	listen_socket_fd = tcp_listen_socket(SERVERPORT);	

	fd_set rfds, readmask;
	int retval;
	
	FD_ZERO(&rfds);
	// 设置监听 socket 感兴趣的可读事件
    FD_SET(listen_socket_fd, &rfds);

	for (;;) {
		readmask = rfds;
        retval = select(listen_socket_fd + 1, &readmask, NULL, NULL, NULL);
		
		// 如果监听 socket 有数据可读的话，说明：
		// 有客户端请求连接监听 socket
		if (FD_ISSET(listen_socket_fd, &readmask)) {
    		if((client_fd = accept(listen_socket_fd, (struct sockaddr *) &cs, &c_size)) == -1) {
        		perror("accept error");
        		exit(1);
    		}
			
    		printf("accept success! fd = %d\n", client_fd);
		}
	}
	// 7. 关闭服务端 server socket
    close(listen_socket_fd);
}
